#include "key_led.h"

#ifdef user_FreeRTOS

#include "FreeRTOS.h"
#include "semphr.h"
#include "queue.h"
#include "cmsis_os.h"

void AppTask_Key_Scan(void *argument)
{
	/* USER CODE BEGIN AppTask_Key_Scan */
	GPIO_PinState key_status = GPIO_PIN_SET;
	keys key = key_none;
	extern osMessageQueueId_t Queue_KeyNumbersHandle;
	/* Infinite loop */
	for (;;)
	{
		key = key_none;
		key_status = HAL_GPIO_ReadPin(KEY_Right_GPIO_Port, KEY_Right_Pin);
		if (key_status == GPIO_PIN_RESET)
			key = key_right;
		key_status = HAL_GPIO_ReadPin(KEY_Left_GPIO_Port, KEY_Left_Pin);
		if (key_status == GPIO_PIN_RESET)
			key = key_left;
		key_status = HAL_GPIO_ReadPin(KEY_Down_GPIO_Port, KEY_Down_Pin);
		if (key_status == GPIO_PIN_RESET)
			key = key_down;
		key_status = HAL_GPIO_ReadPin(KEY_Up_GPIO_Port, KEY_Up_Pin);
		if (key_status == GPIO_PIN_SET)
			key = key_up;

		if (key != key_none)
		{
			xQueueOverwrite(Queue_KeyNumbersHandle, &key);
			osDelay(pdMS_TO_TICKS(300));
		}
		else
		{
			osDelay(pdMS_TO_TICKS(10));
		}
	}
	/* USER CODE END AppTask_Key_Scan */
}

#else
keys key_scan(uint32_t timeout)
{
	uint32_t time_start = HAL_GetTick();

	while (1)
	{
		if (HAL_GPIO_ReadPin(KEY_Right_GPIO_Port, KEY_Right_Pin) == GPIO_PIN_RESET)
		{
			HAL_Delay(10);
			if (HAL_GPIO_ReadPin(KEY_Right_GPIO_Port, KEY_Right_Pin) == GPIO_PIN_RESET)
				return key_right;
		}
		if (HAL_GPIO_ReadPin(KEY_Down_GPIO_Port, KEY_Down_Pin) == GPIO_PIN_RESET)
		{
			HAL_Delay(10);
			if (HAL_GPIO_ReadPin(KEY_Down_GPIO_Port, KEY_Down_Pin) == GPIO_PIN_RESET)
				return key_down;
		}
		if (HAL_GPIO_ReadPin(KEY_Left_GPIO_Port, KEY_Left_Pin)  == GPIO_PIN_RESET)
		{
			HAL_Delay(10);
			if (HAL_GPIO_ReadPin(KEY_Left_GPIO_Port, KEY_Left_Pin) == GPIO_PIN_RESET)
				return key_left;
		}
		if (HAL_GPIO_ReadPin(KEY_Up_GPIO_Port, KEY_Up_Pin) == GPIO_PIN_SET)
		{
			HAL_Delay(10);
			if (HAL_GPIO_ReadPin(KEY_Up_GPIO_Port, KEY_Up_Pin) == GPIO_PIN_SET)
				return key_up;
		}
		if ((HAL_GetTick() - time_start) > timeout)
			return key_none;
	}
}
#endif


